// 执行命令，控制台【不输出结果只返回，检查命令是否执行结束】

const shell = require("shelljs")
// 处理输出
const chalk = require("chalk")
// 处理文件

// 路径

function execSilentCheck(cmd, config) {
  // 返回结果
  return exec(cmd, { silent: true, check: true, ...config })
}
// 执行命令，控制台【不输出结果只返回，不检查命令是否执行结束】
function execSilent(cmd, config) {
  // 返回结果
  return exec(cmd, { silent: true, ...config })
}
// 执行命令，控制台【输出结果并返回，检查命令是否执行结束】
function execCheck(cmd, config) {
  // 返回结果
  return exec(cmd, { check: true, ...config })
}
// 执行命令，控制台【输出结果并返回，不检查命令是否执行结束】
function exec(cmd, config) {
  // 配置
  const conf = config || {}
  // 执行命令
  const res = shell.exec(cmd, {
    // 不输出结果
    silent: conf.silent
  })
  // 执行失败
  if (res.code != 0 && conf.check) {
    // 如果处于禁止输出状态，强行输出错误结果
    if (conf.silent) {
      // 输出错误结果
      console.log(rmEnter(res.stdout))
    }
    // 输出错误提示
    showError(cmd, conf.errMsg)
    // 结束脚本提示
    if (conf.exitMsg) {
      // 以错误结果展示
      BgError(conf.exitMsg)
    }
    // 停止脚本
    if (conf.exit === undefined || conf.exit === true) {
      exit(res.code)
    }
  }
  // 返回结果
  return res
}
// 结束脚本 code: 0 结束 1 失败
function exit(code) {
  process.exit(code)
}
// 显示错误
function showError(cmd, msg) {
  // 错误消息
  const errMsg = msg || `${cmd} 执行失败`
  // 输出错误提示
  BgError(`========================================== Error：${errMsg}`)
}
// 移除头尾空格与换行符
function rmEnter(text) {
  return (text || "").trim()
}
// 判断值是否为true
function isTure(value) {
  // 支持 1、'1'、'true'、'Ture'
  return value == 1 || value === true || value == "true" || value == "Ture"
}

// 输出
// const Info = (msg) => { console.log(chalk.blueBright.bold(msg)) }
// const Error = (msg) => { console.log(chalk.redBright.bold(msg)) }
// const Success = (msg) => { console.log(chalk.greenBright.bold(msg)) }
// const Warning = (msg) => { console.log(chalk.hex('#FFA500').bold(msg)) }

// 输出(带背景)
const BgInfo = (msg) => {
  console.log(chalk.bgBlue.bold(msg))
}
const BgError = (msg) => {
  console.log(chalk.bgRed.bold(msg))
}
const BgSuccess = (msg) => {
  console.log(chalk.bgGreenBright.bold(msg))
}
const BgWarning = (msg) => {
  console.log(chalk.bgHex("#FFA500").bold(msg))
}

// 当前分支
var cb = (execSilent("git branch").stdout.match(/(?<=\* ).*/g) || [])[0]
// 当前时间
var ctime = nowDate()
// 本地分支列表
var lbs = []
// 远程分支列表
var rbs = []
// 当前分支存在远程分支
var isrb = false
// 修复分支前缀
const fbPrefix = `ggit-fix-`
// 配置文件路径

// 获取当前时间
function nowDate() {
  var date = new Date()
  var year = date.getFullYear()
  var month = date.getMonth() + 1
  var day = date.getDate()
  var hour = date.getHours()
  var minute = date.getMinutes()
  var second = date.getSeconds()
  if (month >= 1 && month <= 9) {
    month = "0" + month
  }
  if (day >= 0 && day <= 9) {
    day = "0" + day
  }
  if (hour >= 0 && hour <= 9) {
    hour = "0" + hour
  }
  if (minute >= 0 && minute <= 9) {
    minute = "0" + minute
  }
  if (second >= 0 && second <= 9) {
    second = "0" + second
  }
  return `${year}-${month}-${day} ${hour}:${minute}:${second}`
}

// ================================================== pull
